Подождите, пока модал не будет позиционирован - PullRequest
0 голосов
/ 16 апреля 2020

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

wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable((WEAsesor.BtnColumnas))).Click();

, но модал имеет эффект подъема до достижения своей позиции, которую обнаруживает инструкция, когда модал находится в DOM, но я не может выполнить никаких действий с элементом, так как еще нет этой позиции, у вас есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете написать custom wait реализации, например, так:

wait.Until(element => /* Do something with the element */);

Так что, если вы хотите дождаться местоположения, вам, вероятно, следует сначала подождать (вручную), чтобы увидеть, что Ваше желаемое местоположение. Например:

int expectedLocationX = WEAsesor.BtnColumnas.Location.X;
int expectedLocationY = WEAsesor.BtnColumnas.Location.Y;

После того, как вы знаете ожидаемое местоположение вашего элемента, напишите ваше ожидание:

/* you set whatever the X or Y is, in this example, 10 */
int expectedLocationX = 10; 
int expectedLocationY = 10; 
wait.Until(driver => 
{
    bool isXCorrect = WEAsesor.BtnColumnas.Position.X == expectedLocationX;
    bool isYCorrect = WEAsesor.BtnColumnas.Position.Y == expectedLocationY;

    /* This code will return *true* only if both the X and Y are correct.*/
    return isXCorrent && isYCorrect;
});

По сути, метод wait.Until(driver => ...) говорит: «здесь, используйте драйвер если хотите, сделайте свое дело и верните true, если вы хотите, чтобы я прекратил ждать. Если вы вернете false или null, я продолжу запускать ... и буду ждать, пока вы не вернете мне true или не ноль.

Итак, вы говорите объекту wait, чтобы дождаться, пока ваш элемент окажется в ожидаемом месте.

...