概括了在Page factory Model + selenium Java中创建的Web元素的xpath

时间:2017-06-22 20:43:44

标签: java selenium testing xpath automation

我正在研究selenium Page Factory模型。我需要以这样的方式概括xpath,它应该根据用户需求进行匹配。

让我们说我有跟随xpath

my $d = 'URLs.txt';
open(my $fh, '<:encoding(UTF-8)', $d)
#opendir(D, "$d") || die "Can't open directory $d: $!\n";
  or die "Can't open directory $d: $!\n";

my @list = readdir($fh);
closedir($fh);

foreach my $f (@list) {


my $json_data = get "$f";
my $json_obj = new JSON;
my $URLdata = $json_obj->decode($json_data);

  return $URLdata->{'status'} eq 'UP';
}

我需要根据用户输入将此xpath用于Store#44或Store#100或其他任何内容。

使用常规的旧方法findElementBy我能够实现这一目标。但我想知道页面工厂的概念我们可以实现吗?

由于

1 个答案:

答案 0 :(得分:3)

我的一个项目有类似的用例。以下是我用过的内容:

public RadioElement getTemplates(String id) {
            return createBaseElement(By.id("templateId")).createRadioElement(By.xpath("//input[contains(@value,'1')]"));
        }

在上面的例子中: 1. ElementFactory.createBaseElement(By.id(&#34; lia-templateId&#34;)) //这是帮助定位它的子元素的父类,是一个最好的情况。使用也可以使用类似的用例,传递具有div / id / classname的父级的定位器。

<强> 2。 createRadioElement(By.xpath(&#34; //输入[contains(@value,&#39; 1&#39;)]&#34;)); //传递子类xpath详细信息我根据用户输入调用从函数传递值为动态值。

对于您的情况,您必须做一些类似的更改:

public RadioElement getTemplates(String id) {
    @FindBy(xpath = "(//div[@class='del-hours' and contains(.,'Store #id')]//..//..//..//..//i)[2]")
    WebElement selectStore;
}

尝试修改路径,因为路径似乎不适合您可以使用 (By.xpath("//div[contains(@class,'del-hours')]"))