如何在selenium和python中正确使用By类

如何在selenium和python中正确使用By类,python,selenium,Python,Selenium,我已经编写了一段代码,用selenium在python中测试页面。代码可以正常工作,但现在我正试图将其重写得更好。 我已经创建了一个locators.py文件,如以下文档所述:。 对于简单的定位器,这很简单。 这就是我到目前为止所做的: from selenium.webdriver.common.by import By class PhotoHomePageLocators(object): """A class for photographer home page locators. A

我已经编写了一段代码,用selenium在python中测试页面。代码可以正常工作,但现在我正试图将其重写得更好。
我已经创建了一个
locators.py
文件,如以下文档所述:。
对于简单的定位器,这很简单。 这就是我到目前为止所做的:

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
类中只有一个类。

使用您应该能够按照以下方式排列您要询问的行:

someName = driver.find_element_by_class_name('coverUpload')
ButtonName = someName.find_element_by_class_name('pButton')
ButtonName.click()

如果元素是唯一的,可以使用相对Xpath代替2类搜索

elem=driver.find_元素(By.XPATH,'/*[@class=“coverUpload”]/*[@class=“pButton”]”)
元素单击()

我建议使用selenium的
通过_css_选择器查找_元素
,它允许更健壮和复杂的类链接:

css_selector = '.coverUpload . pButton'
button = find_element_by_css_selector(css_selector)
button.click()
注意:css选择器可能很脆弱,因此请确保您有一个弹性选择策略


尽可能避免使用以
/*
开头的定位器,因为它们效率很低。提供标签的名称更好。或者更好的是,当使用
@id
时,使用的是
By.id
谢谢你,@KirilS。我也得换那些。我不确定我是否完全理解xpath定位器的结构。但我想这是另一个问题。