![](/img/trans.png)
[英]Unable to enter text using send keys in selenium webdriver python
[英]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.