Как отправить файл cfm как тело сообщения электронной почты с помощью ColdFusion?

У меня есть устаревшее приложение, в котором файл email.cfm используется с тэгом cfmail для отправки электронной почты:

<cfmail from="abc@123.com" to="def@456.com" subject="New e-mail!">
    // lots of HTML
</cfmail>

Теперь я хочу обновить его для ColdFusion Model Glue 3 . Я хочу отправить его с помощью объекта mail в controller и включить в тело страницу CFM:

var mail = new mail();
mail.setFrom("abc@123.com");
mail.setTo("def@456.com");
mail.setSubject("New e-mail!");
mail.setBody( ** SOME CFM FILE ** );
mail.send();

Есть ли у кого-нибудь идеи, как я могу это сделать?

-121--854121- Выберите iframe с помощью Python + Selenium Так что я был абсолютно удивлен, как Я пытался выбрать iframe и не имел удачи (или нет...

Итак, я был абсолютно недоумеваю, как это сделать в Селене, и не смог найти ответ нигде, поэтому я делюсь своим опытом.

Я пытался выбрать iframe и не имел удачи (или не повторяется в любом случае). HTML выглядел так:

<iframe id="upload_file_frame" width="100%" height="465px" frameborder="0" framemargin="0" name="upload_file_frame" src="/blah/import/">
<html>
    <body>
        <div class="import_devices">
            <div class="import_type">
                <a class="secondary_button" href="/blah/blah/?source=blah">
                    <div class="import_choice_image">
                        <img alt="blah" src="/public/images/blah/import/blah.png">
                    </div>
                    <div class="import_choice_text">Blah Blah</div>
                </a>
            </div>
        </div>
    </body>
</html>

Код Python (с помощью библиотеки селена) пытался найти этот iframe с помощью этого:

    @timed(650)
def test_pedometer(self):
    sel = self.selenium
    ...
    time.sleep(10)
    for i in range(5):
        try:
            if sel.select_frame("css=#upload_file_frame"): break
        except: pass
        time.sleep(10)
    else: self.fail("Cannot find upload_file_frame, the iframe for the device upload image buttons")

Повторный сбой с каждой комбинацией команд Selenium, которые я мог найти. Случайный успех не будет воспроизводимым, так что, возможно, это было какое-то расовое условие или что-то в этом роде? Никогда не находил правильного способа получить его в собственно селене.

30
задан Acumenus 1 October 2018 в 01:55
поделиться

2 ответа

Это работало для меня с Python (v. 2.7), webdriver & amp; Selenium при тестировании с помощью iframe и попытке вставить данные в iframe:

self.driver = webdriver.Firefox()

## Give time for iframe to load ##
time.sleep(3)
## You have to switch to the iframe like so: ##
driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))
## Insert text via xpath ##
elem = driver.find_element_by_xpath("/html/body/p")
elem.send_keys("Lorem Ipsum")
## Switch back to the "default content" (that is, out of the iframes) ##
driver.switch_to.default_content()
48
ответ дан 27 November 2019 в 23:26
поделиться

Если iframe является динамическим узлом, также можно явно дождаться появления iframe и затем переключиться на него, используя ExpectedConditions :

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

driver = webdriver.Chrome()
driver.get(URL)
wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("iframe_name_or_id"))

Если iframe не имеет @id или @name, его можно найти как обычный WebElement, используя driver.find_element_by_xpath(), driver.find_element_by_tag_name() и т. д.:

wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath("//iframe[@class='iframe_class']")))

Для возврата из iframe:

driver.switch_to.default_content()
10
ответ дан 27 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: