我正在尝试使用Python与py.test和Selenium进行测试自动化。
我尝试了两种方法来点击一个锚<a>
元素来更改网址,这两种方法似乎都不起作用 - 网址不会改变。
除了错误的断言结果外,没有报告错误。
我要点击的元素是:
<li class="ng-scope" ng-repeat="crumb in bcCtrl.data">
<!-- ngIf: !$last -->
<a class="ng-binding ng-scope" ng-if="!$last" ng-href="#/accounts/8" href="#/accounts/8">RC München</a>
<!-- end ngIf: !$last -->
<!-- ngIf: $last -->
</li>
<!-- end ngRepeat: crumb in bcCtrl.data -->
第一种方法是使用:
pre_last_breadcrumb_element = self.find_elements_by_locator(locators['breadcrumb_elements'])[-1]
pre_last_breadcrumb_element.click()
但这似乎没有做任何事情。
第二种方法是使用:
actions = ActionChains(self.driver)
el = self.find_elements_by_locator(locators['breadcrumb_elements'])[-1]
actions.move_to_element(el).click(el).perform()
但仍然没有理想的结果。
我做错了什么?请帮忙......
我使用的代码是:
pre_last_breadcrumb_element = self.find_elements_by_locator(locators['breadcrumb_elements'])[-1]
# this will click the pre-last element in the breadcrumb
print("PreLast = {0}".format(pre_last_breadcrumb_element.text))
print("BEFORE CLICK get_current_url='{0}'".format(self.driver.get_current_url))
# APPROACH 1
actions = ActionChains(self.driver)
el = self.find_elements_by_locator(locators['breadcrumb_elements'])[-1]
actions.move_to_element(el).click(el).perform()
# FIXME: The click on the anchor does not work...
# APPROACH 2
# pre_last_breadcrumb_element.click()
# FIXME: The click on the anchor does not work...
print("AFTER CLICK get_current_url='{0}'".format(self.driver.get_current_url))
# checking if the pre-last element changed due to the click
print("PreLast = {0}".format(pre_last_breadcrumb_element.text))
print("Changing between URLs\nFROM:'{0}'\n TO:'{1}'".format(self.get_url, pre_last_breadcrumb_element.get_attribute("href")))
# this will reload the page class at the newer URL
self.open_at_current_location()
print("Current URL:'{0}'".format(self.get_url))
assert last_breadcrumb_element.text is pre_last_breadcrumb_element.text
结果如下:
PreLast = RC München
BEFORE CLICK get_current_url='http://fct:8080/fct/#/accounts/9'
AFTER CLICK get_current_url='http://fct:8080/fct/#/accounts/9'
PreLast = RC München
Changing between URLs
FROM:'http://fct:8080/fct/#/accounts/9'
TO:'http://fct:8080/fct/#/accounts/8'
get_current_url='http://fct:8080/fct/#/accounts/9'
Current URL:'http://fct:8080/fct/#/accounts/9'
答案 0 :(得分:-1)
如果你已经尝试了所有但都没有取得成功,你可以尝试使用WebDriver#execute_script()
作为替代解决方案,你可以在所需的元素上执行JavaScript
代码来执行click
如下: -
element = self.driver.find_element_by_link_text("RC München")
#now click on this element using JavaScript
self.driver.execute_script("arguments[0].click()", element)
警告: - JavaScript
注入HTMLElement.click()
不应在测试环境中使用。它违背了测试的目的。首先是因为它不会像真正的click (focus, blur, mousedown, mouseup...)
那样生成所有事件,因为它不能保证真实用户可以与元素交互。
但是有些时候由于设计或其他问题,这只是解决方案,因此您可以将其视为替代解决方案。