【问题标题】:Multiple locator for finding webelement with webdriver使用 webdriver 查找 webelement 的多个定位器
【发布时间】:2017-02-01 10:23:36
【问题描述】:

我正在使用带有QAF 的 Selenium Webdriver。 我面临的问题与在网页上查找元素有关。 对于少数元素,不同的定位器在不同的时间工作。

例如 - 有时 name=nameA 有效,有时 name=nameB(可能取决于 AUT 的不同环境,我不知道)。

在下面找到代码:

public class HomePage extends WebDriverBaseTestPage<WebDriverTestPage> {


    @FindBy(locator="name=nameA")
    private QAFWebElement btnSomeElement;


    @Override
    protected void openPage(PageLocator locator, Object... args) {
        driver.get("/");
    }
}

我应该怎么做才能解决这个问题?

【问题讨论】:

  • 不同环境/平台案例的定位器是否不同?
  • 是的,对于单独的环境,如 QA/Staging/Prod 定位器发生变化,我不想用长 xpath 或其他策略超载

标签: java selenium selenium-webdriver testng qaf


【解决方案1】:

虽然您已经在使用 QAF,但您已经拥有可用于此类用例的解决方案。首先,您应该使用 Locator 存储库, 无需在页面中硬编码定位器,只需提供定位器键即可。

例如:

在 page.loc 文件中

my.ele.locator=<locatorStretegy>=<locator>
my.ele.locator=name=elemName

在页面类中:

@FindBy(locator = "my.ele.loc")
private QAFWebElement btnSomeElement; Now coming to your problem, if most of the locator very with environment then you can utilize

resource management capabilities of QAF。在其他情况下,您可以 使用 QAF 提供的alternate locator strategy。例如:

my.ele.locator=['css=.cls#eleid','name=eleName','name=eleName2']
my.ele.locator=['name=eleNameEnv1','name=eleNameEnv2']

【讨论】:

    【解决方案2】:

    您应该得到一个匹配这两种环境的选择器,使用 css 或 xpath 选择器。

    如果您需要任何帮助,请在部分/元素中添加 html sn-p。

    假设您按名称选择并且此名称发生变化,您可以编写一个匹配两个名称的选择器,例如:

    css:[name=nameA], [name=nameB]
    xpath://*[@name='nameA' or @name='nameB']

    【讨论】:

    • 这有时会变得难以提供定位器,例如移动原生尤其是 iOS 的情况
    【解决方案3】:

    定位器有时会发生变化是很常见的。有些甚至是动态的,尤其是表格行中的元素。最好使用更具体的定位器,如 xpath 来定位元素。

    @FindBy(locator = "xpath=//button[text()='ButtonName']")
    private QAFWebElement btnSomeElement;
    

    【讨论】:

      【解决方案4】:
      btn.login.page.logon.button = {\"locator\":[\"xpath=//div[contains(@id,'logonbutton')]//span[contains(text(),'Logon')]\",\"xpath=//*[contains(text(),'Logon') or @id='__screen0-logonBtn']\"]}
      

      这是在 QAF 中使用多个定位器的纯文本文件的相同示例。对我有用。

      【讨论】:

        猜你喜欢
        • 2013-11-18
        • 2017-12-29
        • 1970-01-01
        • 2020-02-11
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 2016-12-05
        • 2017-01-05
        相关资源
        最近更新 更多