Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Ввод значений в td, div (С#)


(Potursak) #1

Прошу помогите!
Необходимо ввести значения в таблицу
Пробовал через:

IWebElement web = PPTest.FindWebElement(new WebItem("//table[@class='PPTS PPTSNoGrid']//tr[3]/td[3]", WebItemTypes.XPath));
            web.Click();
            web.SendKeys("11");

не получается.
Пробовал

RemoteWebElement ieElement = (RemoteWebElement)PPTest.Browser.FindElement(By.XPath("//table[@class='PPTS PPTSNoGrid']//tr[3]/td[3]"));
            IJavaScriptExecutor jsEngine = PPTest.Browser as IJavaScriptExecutor;
jsEngine1.ExecuteScript("arguments[0].innerHTML = arguments[1];", ieElement1, "11");

значение вводится, но после выполнения дальнейших операций новые введенные значения никак не воспринимаются, после нажатия кнопки Обновить, они совсем исчезают.

Привожу HTML-код ячейка, которая уже имеет значение

<td id="c_2_1_TabSheet15144" class="PPTSCell_7_TabSheetModel37461_TabSheet15144 PPTSCell PPTSEvenRowsCell" style="height: 25px; width: 57px; min-width: 57px; max-width: 57px;">
    <div class="PPTSCellContent PPTSCellContent_7_TabSheetModel37461_TabSheet15144 PPTSCellRight" style="max-height: 24px; max-width: 57px; width: 57px;">
            <div class="PPTSCellConText" style="padding-right: 8px; margin: 5px 0px 6px 7px; white-space: nowrap; word-wrap: break-word; max-height: 14px;">45,00</div>
   </div>
</td>

Код пустой ячейки

<td id="c_2_2_TabSheet15144" class="PPTSCell_8_TabSheetModel37461_TabSheet15144 PPTSCell PPTSEvenRowsCell" style="height: 25px; width: 57px; min-width: 57px; max-width: 57px;">
</td>

(vmaximv) #2

Как вам отвечали уже здесь - тайпать в td не имеет смысла, тем более в хроме с синтетическими эвентами.
К тому же тему вы создали “Ввод значений в div” - но по-прежнему в приведенном коде тайпаете в td.


(Potursak) #3

тогда каким образом ввести значение? к тому же div у td добавляется лишь при вводе значения (при ручном вводе)


(vmaximv) #4
  1. Кликаем на ячейке
  2. Ждем дива
  3. Тайпаем в див

(Potursak) #5

не получается.
Даже очистить уже заполненную ячейку не выходит, только лишь кликается на нее

string n = "45,00";
IWebElement web = PPTest.FindWebElement(new WebItem("//table[@class='PPTS PPTSNoGrid']//div[div='" + n + "']", WebItemTypes.XPath));
            web.Click();
            web.Clear();

(vmaximv) #6

Чтойто?
ЗЫ: Клир - тема отдельная. Вы сначала тайпа добейтесь.


(Potursak) #7

Ячейка по значению,
либо

IWebElement web = PPTest.FindWebElement(new WebItem("//table[@class='PPTS PPTSNoGrid']//tr[4]/td[2]/div/div", WebItemTypes.XPath));

(vmaximv) #8

Это не валидный xpath[quote=“potursak, post:7, topic:4178”]
//table[@class=‘PPTS PPTSNoGrid’]//tr[4]/td[2]/div/div
[/quote]
Ну ок - до дива добрались. Теперь нужно определить следующие моменты:

  1. Действительно ли нужно тайпать именно в этот див. Руками кликаем в цел, когда появляется контрол с фокусом - инспектим его. Особенное внимание уделяем атрибуту contenteditable.
  2. Если п.1==true - говорите версию хром_драйвера+хрома+селениума

(Potursak) #9

а если у td нет div-a?


(vmaximv) #10

И что?


(Potursak) #11

как ему присвоить значение?


(vmaximv) #12

Зачем? Вы можете это сделать руками?


(Potursak) #13

А нужно через авто-тест,
так не работает

IWebElement web2 = PPTest.FindWebElement(new WebItem("//table[@class=‘PPTS PPTSNoGrid’]//tr[5]/td[3]", WebItemTypes.XPath));
web2.Click();
web2.SendKeys(rnd_cell.Next(0, 100).ToString() + OpenQA.Selenium.Keys.Enter);


(vmaximv) #14

Перечитайте ответы в этой теме. Складывается впечатление, что вы их просто не замечаете.


(5am) #15

сделать send keys в div не получится.
скорее всего, при клике в этом диве появляется инпут
вам сначало надо кликнуть в див
потом найти инпут
//%xpath_for_div%//input
и в него сделать send keys


(Potursak) #16

отсутствует

про send keys в div не получится.
уже понял


(Potursak) #17

но даже в заполненной ячейке инпут отсутствует

    <td id="c_2_1" class="PPTSCell_7 PPTSCell PPTSEvenRowsCell" style="height: 25px;">
  <div class="PPTSCellContent PPTSCellContent_7 PPTSCellRight" style="max-height: 24px;">
       <div class="PPTSCellConText" style="padding-right: 8px;">45,00</div>
  </div>
</td>

(vmaximv) #18

Вручную:

  1. Запускаем браузер
  2. Заходим на страницу с таблицей
  3. Кликаем по ячейке
  4. Смотрим где сейчас фокус/курсор куда сейчас можно вводить букво-цифры
  5. Кликаем правой кнопкой мыши на этом контроле
  6. Выбираем Inspect Element
  7. Смотрим куда надо тайпать

(5am) #19

после этого, даже не знаю что добавить :smile:


(Potursak) #20

Всем спасибо, разобрался, получилось

IWebElement WebCell = PPTest.FindWebElement(new WebItem("//table[@class='PPTS PPTSNoGrid']//tr[3]/td[3]", WebItemTypes.XPath));
WebCell.Click();
RemoteWebElement webElement = WebCell as RemoteWebElement;
RemoteWebDriver webDriver = webElement.WrappedDriver as RemoteWebDriver;
webDriver.Mouse.DoubleClick(webElement.Coordinates);
webDriver.Keyboard.PressKey(rnd_cell.Next(0, 100).ToString() + OpenQA.Selenium.Keys.Enter);