当前位置: 首页 > 知识库问答 >
问题:

Selenium Python XPATH我可以将html标签id属性的值打印到控制台吗

张勇
2023-03-14

我有一个带有div标记的HTML,它有一个ID属性。ID值是动态的。我已经构建了一个XPATH来定位ID属性,并将其值获取到一个变量中。我可以将值打印到控制台吗?我想知道变量的值是多少。

我尝试打印以下值,但出现错误:我尝试了:

print id.text
print id.get_attribute("id")

错误包括:

AttributeError: 'unicode' object has no attribute 'get_attribute'

AttributeError: 'unicode' object has no attribute 'text'

Selenium Python代码是:

element = self.driver.find_element(By.XPATH, '//*[starts-with(@id,"operations_add_process_list_task")]//span//button')
    id = element.get_attribute("id")
    print id.text

XPATH是:

(By.XPATH, '//*[starts-with(@id,"operations_add_process_list_task")]//span//button')

超文本标记语言是:

<div id="operations_add_process_list_task_2">
    <span/>
<span>
<span class="myinlineblock" title="Clean"
      style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;">
<select tabindex="-1">
</span>
</span>
<span>
<span class="" title="Turn group off or on." style="">
<input type="checkbox" checked="" tabindex="-1"/>
</span>
</span>
<span>
<button class="gwt-Button" title="Add the tasks to the selected group." style="display:block;" type="button">Add tasks
</button>
</span>
</div>

一旦我知道值是什么,我就可以使用下一个定位器的ID。

select = Select(WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//div[@id="%s"]/span[2]//select' % id))))

谢了Riaz

共有1个答案

阳念
2023-03-14

或者,您可以将XPath更改为如下所示,以返回带有id的元素,该元素还包含按钮元素:

//*[starts-with(@id,"operations_add_process_list_task")][.//span//button]

或者,如果跨度是具有目标id元素的直接子节点,则您可能希望使用子节点轴而不是//,因为前者会稍微更有效:

//*[starts-with(@id,"operations_add_process_list_task")][span/button]
 类似资料:
  • 假设下面的代码: 加载此图像时,它会将自身打印到控制台,但输出是一个 HTML 元素,如下所示: <代码> 当我希望它像其他JavaScript对象一样打印时,类似于: 有没有办法强迫它像这样打印?

  • 问题内容: 我的C程序粘贴在下面。在bash中,程序打印“ char is”,不打印Ω。我的语言环境均为en_US.utf8。 问题答案: 这很有趣。显然,编译器将omega从UTF-8转换为UNICODE,但libc某种程度上将其弄乱了。 首先:-format说明符期望一个(即使在wprintf -version 中也是如此),因此您必须指定(并因此指定字符串)。 其次,如果您像这样将语言环境设

  • 我正在使用Windows上的Eclipse IDE(氧气)学习Java(SE8)。我以前做过一些“业余”编程,但这是我第一次正式上这门课。我希望能够在普通控制台(System.out.println)中打印分配所需的输出,并同时在不同的控制台中打印正在发生的信息文本。 printToConsole1(“普通程序输出”);printToConsole2(“幕后信息”); 我可以在Java中做类似的事

  • 我真的被困在作业的这一特定部分,它要求我将简单文本打印到控制台中,然后创建一个文件(无论主文件中的std::string文件名是什么),并将控制台的内容打印到该文件中。 我真的很困惑,因为该函数需要ostream,而且它还需要该函数使用任何文件名(在本例中是statistics.txt,只是为了测试该函数是否工作)。 函数是PrintStatistics。 我知道我可以使用cout在控制台上打印,

  • 你可以使用printf将消息打印到控制台,从而知道应用程序是如何运行的。这是调试代码的很有用的手段,因为你可以打印变量的值、知道什么时候代码将阻塞等等。 我们尝试使用函数unsigned char leds_get(void);打印LED的状态。 获取LED的状态,并将其打印到屏幕。修改test-leds.c如下: #include "contiki.h" #include "dev/leds.h

  • 问题内容: 我想获得的的通过启动到控制台。如何才能做到这一点? 这是一些不完整的代码: 问题答案: 我最近遇到了这个问题,只想提及自从Java 7以来,流程构建器api已得到扩展。现在可以使用以下方法解决此问题: