繁体   English   中英

使用Python绑定无法在Hotmail,Selenium WebDriver中向邮件正文输入文本

[英]Unable to enter text to mail body in Hotmail, Selenium WebDriver, using Python bindings

我有一个正在运行的测试脚本,它在2周前停止工作。 测试是登录到Hotmail,单击新邮件,在正文中填写电子邮件地址,主题和文本,然后发送电子邮件。 目前,我无法在邮件正文中输入文本。 我尝试使用ID,CSS和Xpath。 我也尝试使用选择框架,但无济于事。 我已附上Python代码,并希望获得帮助...

该脚本的目的是使用当前的Hotmail协议,通过Wireshark捕获专门用于Hotmail发送邮件的流量。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re

class HotmailloginpythonWebdriver(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://login.live.com/"
        self.verificationErrors = []

    def test_hotmailloginpython_webdriver(self):
        driver = self.driver
        driver.get(self.base_url + "/login.srf?wa=wsignin1.0&rpsnv=11&ct=1321965448&rver=6.1.6206.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=1033&id=64855&mkt=en-us&cbcxt=mai&snsc=1")
        driver.find_element_by_id("i0116").clear()
        driver.find_element_by_id("i0116").send_keys("address@hotmail.com")
        driver.find_element_by_id("i0118").clear()
        driver.find_element_by_id("i0118").send_keys("password")
        driver.find_element_by_id("idSIButton9").click()
        driver.find_element_by_id("h_inboxCount").click()
        driver.find_element_by_id("NewMessage").click()
        driver.find_element_by_id("AutoCompleteTo$InputBox").clear()
        driver.find_element_by_id("AutoCompleteTo$InputBox").send_keys("address@hotmail.com")
        driver.find_element_by_id("fSubject").clear()
        driver.find_element_by_id("fSubject").send_keys("testsubject")
        driver.find_element_by_css_selector("body..RichText").clear()
        driver.find_element_by_css_selector("body..RichText").send_keys("gggggggggggg")
        driver.find_element_by_id("SendMessage").click()
        driver.find_element_by_id("c_signout").click()

    def is_element_present(self, how, what):
        try:
            self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e:
            return False
        return True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

Microsoft非常有可能阻止试图访问Hotmail或live.com页面的自动服务(如Selenium)。 根据Microsoft的服务条款(TOS),您可以使用自动服务进行登录等。这是TOS(点编号2)所说的:

您不得使用服务损害他人或服务。 例如,您不得使用该服务伤害,威胁或骚扰其他人,组织或Microsoft。 您不得:损坏,禁用,负担过多或损害服务(或与服务连接的任何网络); 转售或重新分发服务或其任何部分; 使用任何未经授权的手段来修改,重新路由或获得对服务的访问权或尝试进行这些活动; 使用任何自动化过程或服务(例如漫游器,蜘蛛程序,Microsoft定期存储的信息缓存或元搜索)来访问或使用该服务。

全文可在这里找到: http : //windows.microsoft.com/en-US/windows-live/microsoft-service-agreement

我曾经使用Twitter UI测试过东西,但自己也有类似的经历。 也许您可以寻找第三方服务,以帮助您通过SMTP或POP3等登录而不是使用前端UI来测量网络流量。

我怀疑这与Cookie有关。 也许您从浏览器中删除了Cookie?

尝试调试脚本,直到输入密码或直到

driver.find_element_by_id("idSIButton9").click()

看看它是否工作正常。 也许MS更改了他们的UI,所以从那时开始调试您的应用程序会很不错,以查看是否需要修改脚本来更新对象ID。

问候。

尝试使用Xpath而不是id。 您可以在xpath中使用following-sibling。

    System.setProperty("webdriver.chrome.driver",
            "F:\\batch230\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    //open hotmail site
    driver.get("http://www.hotmail.com/");
    Thread.sleep(5000);
    driver.manage().window().maximize();
    Thread.sleep(5000);
    //do login
    driver.switchTo().activeElement().sendKeys("mail id");
    driver.findElement(By.id("idSIButton9")).click();
    Thread.sleep(5000);
    driver.switchTo().activeElement().sendKeys("password");
    driver.findElement(By.id("idSIButton9")).click();
    Thread.sleep(5000);
    //compose mail
    driver.findElement(By.xpath("//*[contains(@title,'new message')]")).click();
    Thread.sleep(5000);
    driver.findElement(By.xpath("(//*[@role='textbox'])[1]"))
    .sendKeys("er.anil900@gmail.com",Keys.TAB,"selenium"
            ,Keys.TAB,"Hi",Keys.ENTER,"How are you");
    Thread.sleep(5000);
    //send mail
    driver.findElement(By.xpath("(//*[@title='Send'])[1]")).click();        
    Thread.sleep(10000);
    //do logout
    WebElement e = driver.findElement(By.xpath("(//*[@role='menuitem'])[11]"));
    Actions a = new Actions(driver);
    a.click(e).build().perform();
    Thread.sleep(5000);
    WebElement e1 = driver.findElement(By.xpath("//*[text()='Sign out']"));
    a.click(e1).build().perform();
    Thread.sleep(10000);
    driver.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM