2014-10-08 150 views
1

如何使用webdriver通过标签查找输入字段?Webdriver - 通过标签定位输入(Python)

我喜欢测试某个不幸使用动态生成的 ID的Web表单,因此它们不适合作为标识符。

然而,与每个网页元素相关的标签都适合我。 不幸的是,我无法做到这一点与网上提供的几个建议 。有一个线程在这里如此,但是这并没有 产生一个公认的答案:

Selenium WebDriver Java - Clicking on element by label not working on certain labels

为了解决Java的这个问题时,通常建议通过其文本内容定位标签作为锚然后指定输入元素的xpath:

//label[contains(text(), 'TEXT_TO_FIND')] 

我不知道如何在python中做到这一点。 我的网络元素:

<div class="InputText"> 
    <label for="INPUT"> 
     <span> 
      LABEL TEXT 
     </span> 
     <span id="idd" class="Required" title="required"> 
      * 
     </span> 
    </label> 
    <span class="Text"> 
     <input id="INPUT" class="Text ColouredFocus" type="text" onchange="var wcall=wicketAjaxPost(';jsessionid= ... ;" maxlength="30" name="z1013400259" value=""></input> 
    </span> 
    <div class="RequiredLabel"> … </div> 
    <span> … </span> 
</div> 

回答

1

不幸的是,我无法在网站上使用CSS或XPATH表达式 。 ID和名称总是改变。

我发现我的问题的唯一解决方案是肮脏的 - 解析页面的源代码 并通过字符串操作提取ID。 当然,这不是网络驱动器打算使用的方式,但 它运作稳健。

代码:

lines = [] 
for line in driver.page_source.splitlines(): 
    lines.append(line) 
    if 'LABEL TEXT 1' in line: 
     id_l1 = lines[-2].split('"', 2)[1] 
0

你应该开始用一个div并检查是否有一个label带内的恰当的span,那么您可以通过span标签input元素与Text类:

//div[@class='InputText' and contains(label/span, 'TEXT_TO_FIND')]/span[@class='Text']/input 
+0

你能做出这样的回答更加明确给我吗?也许取决于我给的例子html? – 2014-10-09 09:15:02

+1

要使用上面提供的@alecxe,只需将他的“TEXT_TO_FIND”更改为“LABEL TEXT”(从您的示例中)。它会找到一个div,后面有一个标签,后跟一个带有文本“LABEL TEXT”的文本,如果你愿意的话,找到'home'点。然后在该div下找到类Text的范围,然后输入你想要的元素。 – 2014-10-10 09:31:29

相关问题