我已经编写了一个用selenium在python中测试页面的代码。代码有效但现在我试图更好地重写它
我已按照以下文档中所述创建了locators.py
文件:selenium python binding - page objects
对于简单的定位器,这很简单。
这是我到目前为止所做的:
from selenium.webdriver.common.by import By
class PhotoHomePageLocators(object):
"""A class for photographer home page locators. All photographer interface home page locators should come here"""
add_new_project_btn = (By.CLASS_NAME, 'addProject')
view_all_projects_btn = (By.CLASS_NAME, 'viewAllProjects')
class NameCoverPageLocators(object):
"""A class for name and cover home page locators. All name and cover page locators should come here"""
project_name_txt_box = (By.XPATH, '//*[@id="rform_pt2_0"]')
client_name_txt_box = (By.XPATH, '//*[@id="rform_pt2_1"]')
client_email_txt_box = (By.XPATH, '//*[@id="rform_pt2_2"]')
但我的代码中有以下行,我不确定如何写,所以它符合上述语法:
driver.find_element_by_class_name('coverUpload').find_element_by_class_name('pButton').click()
我在一个类中定位一个类,页面中有几个pButton
类,但coverUpload
类中只有一个类。
答案 0 :(得分:1)
您应该能够按如下方式安排您要询问的线路:
someName = driver.find_element_by_class_name('coverUpload')
ButtonName = someName.find_element_by_class_name('pButton')
ButtonName.click()
答案 1 :(得分:0)
答案 2 :(得分:0)
如果那个元素是唯一的,也许你可以使用相对 Xpath 而不是 2 类搜索。
elem = driver.find_element(By.XPATH, '//*[@class="coverUpload"]//*[@class="pButton"]')
elem.click()
答案 3 :(得分:0)
我建议使用 selenium 的 find_element_by_css_selector
,它允许更健壮和复杂的类链接:
css_selector = '.coverUpload . pButton'
button = find_element_by_css_selector(css_selector)
button.click()
<块引用>
注意:css 选择器可能很脆弱,所以请确保你有一个弹性选择策略。