如何正确使用By中的类与python中的selenium

时间:2016-08-14 15:27:33

标签: python selenium

我已经编写了一个用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类中只有一个类。

4 个答案:

答案 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 选择器可能很脆弱,所以请确保你有一个弹性选择策略。