如何在selenium,python中使用带有动态id的javascript执行器?

时间:2018-02-12 15:25:12

标签: python selenium

也许你在现场测试中遇到了类似的问题...

在执行测试期间,我从控制台中获取信息,该元素无法滚动到视图中。我发现可能使用java脚本执行器是解决方案。这是一个下拉列表。

有2个onclicks,指的是2个动作阶段,所有这些都包含动态数字:

ITypedFactoryComponentSelector

因此,如果我想使用它,我可能必须将动态id作为参数引用:

onclick="selector('phone_dynamicnumberlike98046454')" - general
onclick="pick('phone_dynamicnumberlike454674645',event)" - choose the type from dropdown

现在我使用starts-with引用动态id并包含:

driver.execute_script(selector(dynamic id?);)

在下一行中,我用xpath和值来表示电话的类型。

如何使用javascript executor正确替换这行代码?我的意思是什么是python中的最佳实践,selenium?

2 个答案:

答案 0 :(得分:0)

为什么不使用scroll-to-view方法而不是JS executor?

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_xpath("(//*[starts-with(@id, 'phone') and 
contains(@id, 'dropdown')])")

actions = ActionChains(driver)
actions.move_to_element(element).perform()

答案 1 :(得分:0)

您是否尝试使用getBoundingClientRect()scrollTo()

滚动到该元素
element = driver.find_element_by_xpath("(//*[starts-with(@id, 'phone') and contains(@id, 'dropdown')])")
driver.execute_script("coordinates = arguments[0].getBoundingClientRect();scrollTo(coordinates.x,coordinates.y);", element)

同样令您感到困惑的是因为当您在同一元素上有两个onclick属性时,它们都会被click()触发。