【问题标题】:Why my selenium IDE works good while the same python command doesn't?为什么我的 selenium IDE 运行良好,而相同的 python 命令却不行?
【发布时间】:2018-09-16 09:28:34
【问题描述】:

我在尝试自动执行公司内部网站中的重复性任务时遇到了一些问题。

虽然我可以在其他网站中正确找到元素(单击、发送密钥等),但我不能在这个网站中做同样的事情(我总是得到的错误是“无法使用 xpath 找到元素 em> == ...")。

我尝试用 Selenium IDE 完成相同的任务记录它们,并且效果很好。

如果我将 Selenium IDE 测试用例导出为 python 代码并将 xpath 命令与我的命令进行比较,xpath 是相同的,并且我使用 firefox 选择器到我想要单击的点得到的也是相同的。

由于其他原因我必须使用资源管理器(所以我有资源管理器 webdriver 等),我没有尝试使用 python+(Firefox 的 webdriver)运行代码。

代码:

from selenium import webdriver
import time
driver=webdriver.IE("D:\myfolder\IEDriverServer.exe")
driver.implicitly_wait(30)
base_url="https://companywebsite.ext")
driver.get(base_url)    #it's ok until now, I can open the webpage
time.sleep(20)
element=driver.find_element_by_xpath("/html/body/div[2]/div/table/tbody/tr[3]")
time.sleep(10)

这是我的问题:

1) 为什么我可以在其他网站上做正确的事情而不是在这个网站上?

2) 为什么 Selenium IDE 能够做到这一点,并且使用相同的命令,它不适用于我的 python 脚本?

3) 我必须进行特定设置吗?

非常感谢。

【问题讨论】:

  • 您的公司网站是用 Angular 编写的吗?如果是这样,您应该尝试使用等待元素
  • 谢谢你,摩西。我认为它不是用 Anguar 编写的,因为如果我在浏览器控制台中搜索 angular 元素,我什么也找不到。
  • 你试过用IE驱动其他网站吗?
  • 是的,而且效果很好。我在 Facebook、Linkedin 等中尝试过:我成功地点击了链接或将密钥发送到表单。您知道可能是什么问题吗?
  • 如果我想等待页面中发生某些事情,正如您建议谈论的角度元素,我应该使用哪种命令?一般的 time.sleep 命令是否足以实现这一目标?

标签: python selenium internet-explorer selenium-webdriver


【解决方案1】:

你应该尝试使用wait的:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver=webdriver.IE("D:\myfolder\IEDriverServer.exe")
driver.implicitly_wait(30)
base_url="https://companywebsite.ext")
driver.get(base_url)

wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.XPATH, "/html/body/div[2]/div/table/tbody/tr[3]")))

希望这会有所帮助!

【讨论】:

  • 感谢您的帮助,真的。现在追溯在 TimeoutException 中发生了变化,就像它在查找元素时仍然存在问题一样。奇怪的是 selenium ide 可以工作,如果你将它导出为 python 代码,xpath 是一样的!顺便说一句,我可以添加一些信息:该页面包含一个表格,其中行对应于不同的配置文件;在 HTML 中,我发现了一些“onclick”命令:它们适用于每个配置文件,它们看起来像 <tr onclick='document.forms.namedItem("a1").submit()'> 你认为这对模拟鼠标点击其中一个有用吗?
  • 是的!你可以加driver.execute_script("your JS to simulate clicking")
  • 所以在这种情况下我应该尝试类似:driver.execute_script("document.forms.namedItem("a1").submit()") ?谢谢!
  • 应该可以!您只需单击需要单击的元素...使用 selenium!
  • 非常感谢,莫舍。我试了一整天,还是不行。我不知道这个页面中似乎有一些东西被加密了:我找不到任何使用常用命令的东西。此外,我唯一可以激活的onclick命令是指向主页的链接......我对js太不熟练了,也许......或者可能隐藏了一些东西。
猜你喜欢
  • 2013-01-28
  • 2013-07-27
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-26
  • 2016-07-30
  • 1970-01-01
相关资源
最近更新 更多