我是Selenium WebDriver的新手,但主要使用基于Java / Wicket的应用程序。不幸的是,我一直在想弄清楚如何识别Wicket框架提供的页面导航控件集合。控件如下所示:
<< < 1 2 3 4 5> >>
使用Firebug我可以看到一个包含动态ID的href字符串,而且这些元素没有被命名,因此我的困境。
任何建议都将受到赞赏。
答案 0 :(得分:1)
Firebug有一个名为FirePath的插件,允许用户通过Xpath查找元素。它还允许用户找到元素XPath。 Xpath可以在Selenium测试类中使用。
您还可以使用Selenium标记将Div id添加到Java中的元素。然后在Selenium测试用例中使用Div id。
下面是按Xpath单击元素的示例。
driver.findElement(By.xpath("//span/a[@title='San Jose Sharks']")).click();
答案 1 :(得分:0)
你说他们是元素?那应该相对简单。
int pageNum = 1;//Or whatever number you want to click on
driver.findElement(By.linkText(pageNum+""));
如果其他链接中包含数字(可能很有可能),您可以选择父元素:
driver.findElement(By.cssSelector(".pageNumSet")).findElement(By.linkText(pageNum+""));
(显然.pageNumSet
选择器必须改变。
(顺便说一句,我不推荐XPath,除非你绝对必须使用它。它是所有选择器中最强大的,但也是最慢的。(生成的XPath也可能非常脆弱)
答案 2 :(得分:0)
标准的wicket id随每个页面的变化而变化,因此您无法使用它们。但是,您可以指示wicket为每个元素添加wicketpath属性(在适当的情况下 - 可能只是链接/按钮?)然后告诉Selenium使用wicketpath而不是wicket id: http://www.jdev.it/testing-a-wicket-application-with-selenium-ide/
Wicket只会在调试模式下添加'wicketpath'元素,因此您的生产网站不会失去任何性能,因为它不会有它们。
答案 3 :(得分:0)
我遇到了与检票口完全相同的问题。不断变化的 id ,表单中的隐藏输入字段,href中的jsessionid=BcxrRceaycMF3I0ZgL5lMfHg_tEQ2mIS6IS71m69
可以保护页面更改块免遭刮擦,如果您不检索它,将永远不会看到它通过无头的浏览器和其他所有幼儿园的愚蠢行为。
针对此特殊情况的解决方案 (因为我完全一样,这是一个实时示例):
from selenium import webdriver
options = webdriver.ChromeOptions()
# options.add_argument('headless')
options.add_argument('window-size=1920x1080')
options.binary_location = '/usr/bin/google-chrome'
browser = webdriver.Chrome(executable_path='/opt/google/chrome/chromedriver',
chrome_options=options)
browser.get('https://webapps1.chicago.gov/activegcWeb/')
page_link = browser.find_element_by_link_text('2') # or any other
page_link.click()
通过此操作,您可以在此分页菜单中抓取所有页面(并使用'>'进一步移动)。这个技巧很好用,因为“ 2”是链接的完整文本;很难想象页面上还会有另一个这样的链接(除了下部或上部分页菜单外)。
有一种变体driver.find_element_by_partial_link_text()
方法。并且,当然,其余所有内容都通过以下示例进行了说明:
https://selenium-python.readthedocs.io/locating-elements.html
享受! :)