Python 在变量中存储定位器

Python 在变量中存储定位器,python,selenium,Python,Selenium,我是Python新手,我正在使用当前的JavaSelenium项目作为将其转换为Python的学习体验 在Java中,我可以通过buttonSaveLoc=By.id(“保存按钮”)然后,使用此定位器很容易,因为您不需要记住定位器数据,也不需要记住策略。Python中是否有一个等价物 编辑: 我正在寻找定位器,而不是web元素,因此它可以用于多种用途,例如查找元素(定位器)或预期的条件。某些条件(定位器) 例如: //SomePageComponent.java 公共类SomePageCompo

我是Python新手,我正在使用当前的JavaSelenium项目作为将其转换为Python的学习体验

在Java中,我可以通过buttonSaveLoc=By.id(“保存按钮”)然后,使用此定位器很容易,因为您不需要记住定位器数据,也不需要记住策略。Python中是否有一个等价物

编辑:

我正在寻找定位器,而不是web元素,因此它可以用于多种用途,例如查找元素(定位器)或预期的条件。某些条件(定位器)

例如:

//SomePageComponent.java
公共类SomePageComponent扩展页面{
私有静态final By buttonseveloc=By.cssSelector(“button[title='Save']”);
公共作废clickSaveButton(){
clickElement(按钮速度);
}
}
//Page.java
公共类页面{
public void clickElement(@NotNull By locator){
goWait().Toil(ExpectedConditions.elementToBeClickable(locator))。单击();
}
}
#somepagecomponent.py
类SomePageComponent(页):
定义初始化(自身,ctx):
超级()。\uuuu初始化(ctx)
self.button_save_loc=(By.CSS_选择器,'button[title=“save”]”)
def保存(自我):
self.click_元素(*self.button_save_loc)
#page.py
班级网页:
定义初始化(自身,ctx):
self.browser=ctx.browser
self.timeout=ctx.browser\u超时
def click_元素(自身、定位器):
wait=WebDriverWait(self.browser,self.timeout)
等待。直到(预期的条件。元素可单击(定位器))。单击()
#场景_steps.py
@当('用户保存某些内容')
def步骤实施(ctx):
something=something页面组件(ctx)
保存
Python脚本失败

注意,在Java示例中,只要使用定位器,我就不需要记住查找它的策略(通过id、类名等),也不需要记住数据(一些id或css脚本)

同样,我想要定位器的原因是期望的条件元素是可点击的(),它接受定位器,而不是web元素。您可以在我发布的代码片段中看到它的用法


因为这似乎很难理解,所以我假设我在Python中使用它是完全错误的,Python中有另一种方法来做同样的事情。

是的,您只需要指定一个变量类型:

对于id:

element = driver.find_element_by_id("locator id")
对于xpath:

element = driver.find_element_by_xpath("xpath locator")
对于css:

element = driver.find_element_by_css_selector("css locator")
您可以在此处找到完整列表: 正如您可以从
find\u element\u by\u id
-
by
中看到的,已经存在了。 要将定位器存储为字符串,请使用locator=“locator id”,这样您的定位器列表将只是需要时传递的字符串

除此之外,您还可以使用类似于在Java上运行测试时使用的方法。示例取自上面的文档链接:

from selenium.webdriver.common.by import By

element = driver.find_element(By.XPATH, '//button[text()="Some text"]') 

你的帖子有点让人困惑,但下面的内容基本上是一样的

爪哇

蟒蛇

buttonSaveLoc = driver.find_element_by_id("save-button")
#re-use..
buttonSaveLoc.click()
buttonSaveLoc.send_keys("abc")
如果您希望直接存储定位器本身,则:

buttonSaveLoc = "save-button"
#re-use..
driver.find_element_by_id(buttonSaveLoc)

但这是一个WebElement而不是定位器。要将定位器存储为字符串,请使用
Locator=“Locator id”
我添加了另一个示例。我给出的链接包含查找元素所需的所有内容。我也开始在Java/C上做测试,后来改用Python。好吧,这是什么魔法?起初,我尝试使用By.CSS_选择器时无法使其工作,该选择器在单词之间有一个空格。但是,它与By.ID一起工作。为什么这样做(是的,我读过*(tup,les),但仍然没有看到)。有没有办法让它与By.CSS_选择器一起工作?星号只对我有效一次。如果我将该参数用作下一个方法的参数,它将失败。为了澄清:我使用了一个方法单击某个东西,然后调用另一个方法以期望的条件等待,然后单击。对于id,css选择器将类似于#保存按钮
查找元素(定位器)
期望的条件(定位器)
也被Web元素重载。问题解决了吗?我最终使用了一个Locator类和一个方法来生成一个元组,这个元组有效。单独使用元组不起作用。您的最后一段代码没有存储定位器策略,这意味着您必须记住使用
find\u element\u by\u id()
,而不是例如
find\u element\u by\u css\u selector()
。我添加了一个Java示例,希望能澄清这一点。无可否认,因为我是Python新手,所以我可能完全错了。@Brazen。我明白你现在在说什么了。我不认为有任何方法可以用Python以这种特定的方式构造它。我在工作中使用C#,它的设置与上面展示的Java相同,我从未真正考虑过这种差异。Python的行为方式不同,至少在我所知道的任何方面都不一样。
buttonSaveLoc = "save-button"
#re-use..
driver.find_element_by_id(buttonSaveLoc)