Как выполнить итерацию < td > в таблице, чтобы найти конкретный текст с помощью транспортира?

Наряду с принятым ответом, который правильно объяснил проблему, в понимании вашего списка, если вы используете python-2.x, используйте xrange(), который возвращает более эффективный генератор (range() в python 3 выполняет ту же работу ) _ вместо переменной throw n:

[[1]*4 for _ in xrange(3)]      # and in python3 [[1]*4 for _ in range(3)]

Кроме того, в качестве более Pythonic способа вы можете использовать itertools.repeat() для создания объекта итератора повторяющихся элементов:

>>> a=list(repeat(1,4))
[1, 1, 1, 1]
>>> a[0]=5
>>> a
[5, 1, 1, 1]

PS Используя numpy, если вы хотите создать только массив единиц или нулей, вы можете использовать np.ones и np.zeros и / или для использования других чисел np.repeat():

In [1]: import numpy as np

In [2]: 

In [2]: np.ones(4)
Out[2]: array([ 1.,  1.,  1.,  1.])

In [3]: np.ones((4, 2))
Out[3]: 
array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.]])

In [4]: np.zeros((4, 2))
Out[4]: 
array([[ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.],
       [ 0.,  0.]])

In [5]: np.repeat([7], 10)
Out[5]: array([7, 7, 7, 7, 7, 7, 7, 7, 7, 7])

-1
задан Virus 25 March 2019 в 15:43
поделиться

3 ответа

Ваше требование не использовать xpath кажется очень ограничительным, так как это, безусловно, лучший метод для вашего случая использования, главным образом потому, что определение местоположения на основе css не позволяет вам выполнять точное сопоставление с текстом тега , в ваше дело название <td> с.

Для достижения этой цели с помощью CSS вы должны будете использовать некоторые потенциально ненадежные цепочечные локаторы, такие как

element(by.cssContainingText('tr','test')).element(by.css('button'));

Я говорю ненадежно, так как этот локатор фактически идентифицирует все три ваши кнопки из-за того, что все три вашего заголовка тега содержат символы «тест». Это работает в этом случае, но может вызвать проблемы в ваших реальных тестах.

Я бы серьезно рекомендовал отменить требование отсутствия xpath и перейти к следующему братскому ответу, предоставленному Пеком, поскольку это будет наиболее надежный долгосрочный период.

0
ответ дан DublinDev 25 March 2019 в 15:43
поделиться

Ну, во-первых, лично я не имел бы идентичных элементов (с точки зрения HTML) на одной странице, если бы мог контролировать это. Но чтобы ваш элемент отображался в HTML, должно работать следующее: (Я пишу Javascript из-за вашего тега транспортира, я предполагаю, что так написаны ваши тесты)

buttons = driver.findElements(By.xpath("//button"))
buttons[1].click();

Однако, если вы хотите найти его по имени (для любого случая использования), который вы могли бы сделать

buttonWithText1 = driver.findElement(By.xpath("//td[text()[contains(., 'test1')]]/following-sibling::td/button");
buttonWithText1.click();

Поскольку @Sers указывает ниже, xpath //td[.='test1']/following-sibling::td/button также работает и является самым чистым. Или самое короткое, по крайней мере.

Если вы хотите динамически использовать этот xpath для поиска кнопок по этому тексту, вы можете использовать:

var myText = "test1"
driver.findElement(By.xpath("//td[.='" + myText + "']/following-sibling::td/button).click()

РЕДАКТИРОВАТЬ

пользователь сказал, что он не хочет использовать xpath. Основываясь на HTML, вы можете использовать селектор CSS, как этот, чтобы выбрать кнопку рядом с какой-нибудь строкой myText.

var buttons = browser.findElements(By.css(‘button.ng-binding’))
var tds = browser.findElements(By.css(‘td.ng-binding’))
for (i = 0; i < tds.length; i++) {
    if (tds[i].getText()==myText) {
        buttons[i].click()
        break;
    }
}
0
ответ дан C. Peck 25 March 2019 в 15:43
поделиться

Вы не хотите использовать и за исключением innerHTML все остальные значения атрибутов эталонных узлов <td> идентичны. Теперь не поддерживают innerHTML, поэтому, чтобы найти кнопку рядом с элементом с текстом как test1 , вы можете использовать следующее [117 ] css-селекторы :

"table>tbody tr:nth-child(2) td:nth-child(2)>button"
0
ответ дан DebanjanB 25 March 2019 в 15:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: