我有一个情况,id总是随机改变, 所以我不能使用find_element_by_id
上面有一些divs
,
<div class="x-tree-view x-fit-item x-tree-view-default x-unselectable"
id="treeview-2234"
tabindex="0"
componentid="componentstree-1118"
style="overflow: auto;
margin: 0px; height: 443px; width: 228px;">
<div class="x-grid-item-container"
style="width: 228px;
transform:
translate3d(0px, 0px, 0px);">
<table id="treeview-2234-record-879"
data-boundview="treeview-2234"
data-recordid="879"
data-recordindex="0"
class="x-grid-item x-grid-item-selected"
cellpadding="0"
cellspacing="0"
style="width:100%;">
我已经尝试过:
我是EXt
的另一个受害者,我该怎么办?
答案 0 :(得分:1)
如果每次刷新页面时ID都不同,则无法按ID选择元素。相反,您需要找到一种方法来通过其他独特的东西来选择元素。这可以通过使用其中一个属性(data-boundview
,data-recordid
,....),或通过HTML结构选择table
元素的路径,该结构随时加载页面已刷新。
然后我会使用driver.find_element_by_xpath()
来选择元素。例如,您可以按以下方式选择元素:
driver.find_element_by_xpath('//table[@data-boundview="treeview-2234"]')
或者,如果您了解HTML结构,则可以执行以下操作:
driver.find_element_by_xpath('//div[@id="ancestor-div"]/div[@id="parent-div"]/table')
答案 1 :(得分:1)
我会按照预期在dom上尝试 xpath 。您可能需要抓住更改dom 的不更改父dom ,并通过xpath中的多种方式从中获取子项 -
使用contains
功能 -
driver.find_element_by_xpath("//div[@class= 'x-grid-item-container']/table[contains(@data-boundview,'treeview-')]")
它会抓取所有data-boundview
值treeview-
的{{1}}如果data-boundview
的值treeview-
更多,那么请尝试抓住不变父母首先然后深入挖掘它以获得孩子,如前所述。
答案 2 :(得分:1)
如果ur id随机变化,请使用未更改的类,如下所示:
driver.find_element_by_css_selector("div.x-tree-view.x-fit-item.x-tree-view-default.x-unselectable");
这将选择第一个div。要选择第二个div,请使用
driver.find_element_by_css_selector("div.x-grid-item-container");
如果表格在此div下,请尝试这样:
driver.find_element_by_css_selector("div.x-grid-item-container>table.x-grid-item.x-grid-item-selected");
答案 3 :(得分:0)
如果您的ID中shift = 5.5;
Nw = floor(shift);
shift_b = [zeros(1, Nw) 1];
shift_a = 1;
Nf = mod(shift,1);
alpha = -(Nf-1)/(Nf+1);
fract_b = [alpha 1];
fract_a = [1 alpha];
%// now filter as a cascade . . .
mag1s = filter(shift_b, shift_a, mag1);
mag1s = filter(fract_b, fract_a, mag1s);
不变,则可以搜索包含它的ID:
id="treeview-2234"