每次调用变量时如何调用方法

时间:2014-11-25 14:41:21

标签: java selenium dynamic

所以我有一个使用方法的变量。像这样:

By locator = By.id("something-"+getDynamicId());

通常id会改变这样的数字:something-1 to something-2(不是那些确切的数字,总是不同)。我有办法通过调用getDynamicId()方法获取它更改的数字。问题是,当我开始测试时,id在开始时设置,每当我点击特定按钮时,id会改变,但我的变量不会。每次调用 locator 时, locator 变量是否可以调用getDynamicId()?也许每次我点击定位器重新加载的特定按钮?

我查了ClassLoaders,但我不知道如何使用它,也不知道它是否能做我想要的。

2 个答案:

答案 0 :(得分:0)

我没有这样做,而是通过使用CSS来获得动态ID。

driver.findElement(By.cssSelector("element[id^='something']"));

这意味着“找到<element>标记,其id属性为starts with”某事“

如果有多个元素与此匹配,那么您需要提高特异性。您可以通过选择一些父级来完成此操作。

div.some-div [id^='something']

            ^  the space here meaning "a descendent of.."

this page可能有助于为Selenium制定像这样的CSS选择器。

答案 1 :(得分:0)

此外,除了@sircapsalot所做的之外,您还可以使用xpath来处理动态ID,如下所示(正如您在评论中所说,有多个元素包含ID包含“某些内容”):

List<WebElement> elements = driver.findElements(By.xpath("//tag[contains(@id,'something-')]"));
//Say you want to click on 4th element now then use the below code(assuming the list has more than or equal to 4 elements in it)
elements.get(3).click();

此处,它会将标记为“tag”的所有元素定位,并且“id”包含文字“something - ”然后单击列表中的第4个元素。


但是,如果你想检索动态ID并使用它来点击特定元素,你可以创建一个这样的新方法:

public static void clickOnDynamicElementById(String partial_locator_id){

    //Code for getting dynamic id and then storing the retrieved dynamic ID in a string, say "dynaID";

    String locator_id_to_click = partial_locator_id + dynaID;

    driver.findElement(By.id("locator_id_to_click")).click();

}

然后,您可以直接在main方法中调用此方法,如下所示:

  clickOnDynamicElement("something-"); //because main method is also static, it can call the method directly.