Альтернатива вектору <bool>

Это сообщение об ошибке ...

org.openqa.selenium.InvalidSelectorException: Given xpath expression "//div[contains(@class='loader-overlay')]" is invalid: [Exception... "<no message>"  nsresult: "0x8060000d (<unknown>)"  location: "JS frame :: chrome://marionette/content/element.js :: element.findByXPath :: line 401"  data: no]
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html

... подразумевает, что выражение xpath не было допустимым.

Решение

Если элемент имеет один атрибут class как loader-overlay , вам нужно изменить xpath as:

"//div[@class='loader-overlay']"

Если элемент имеет несколько атрибутов , класса и loader-overlay , один из них вам нужен изменить xpath следующим образом:

"//div[contains(@class, 'loader-overlay')]"
86
задан CoffeeTableEspresso 25 July 2019 в 06:24
поделиться

5 ответов

Используйте std::deque , если Вам не нужны массив, да.

Иначе используют альтернативу vector, который не специализируется на bool, такие как тот в Контейнер Повышения .

38
ответ дан Daniel Earwicker 24 November 2019 в 08:06
поделиться

Это - интересная проблема.

, Если Вам нужно в том, что было бы станд.:: вектор, если бы это не было специализировано, тогда возможно, что-то как этот, хорошо работал бы с Вашим случаем:

#include <vector>
#include <iostream> 
#include <algorithm>

class Bool
{
public:

    Bool(): m_value(){}
    Bool( bool value ) : m_value(value){}

    operator bool() const { return m_value;}

    // the following operators are to allow bool* b = &v[0]; (v is a vector here).
    bool* operator& () { return &m_value; }
const bool * const operator& () const { return &m_value; }

private:

    bool m_value;

};




int main()
{
    std::vector<Bool> working_solution(10, false);


    working_solution[5] = true;
    working_solution[7] = true;


    for( int i = 0; i < working_solution.size(); ++i )
    {
        std::cout<< "Id " << i << " = " << working_solution[i] << "(" <<(working_solution[i] ? "true" : "false") << ")" <<std::endl; // i used ? : to be sure the boolean evaluation is correct
    }

    std::sort( working_solution.begin(), working_solution.end());
    std::cout<< "--- SORTED! ---" << std::endl;

    for( int i = 0; i < working_solution.size(); ++i )
    {
            bool* b = &working_solution[i]; // this works!

        std::cout<< "Id " << i << " = " << working_solution[i] << "(" << (working_solution[i] ? "true" : "false") << ")" <<std::endl; // i used ? : to be sure the boolean evaluation is correct
    }

    std::cin.get();
    return 0;
}

я попробовал это VC9, и это, кажется, хорошо работает. Идея класса Bool состоит в том, чтобы моделировать тип bool путем обеспечения того же поведения и размера (но не тот же тип). Почти вся работа сделана bool оператором и конструкторами копии по умолчанию здесь. Я добавил вид, чтобы быть уверенным, что он реагирует, как принято при использовании алгоритмов.

Не уверенный это удовлетворило бы всем случаям. Если бы это правильно для Ваших потребностей, это было бы меньше работы, чем перезапись подобного вектору класса...

20
ответ дан Klaim 24 November 2019 в 08:06
поделиться

Зависит от Ваших потребностей. Я пошел бы для также std::vector<unsigned char>. Writting обертка может быть прекрасной, если Вы только используете подмножество функциональности, еще это станет кошмаром.

17
ответ дан Daniel Earwicker 24 November 2019 в 08:06
поделиться

Рассмотрите использование vector< интервал>. Как только Вы заканчиваете компиляцию, и проверка типа, bool и интервал являются оба просто машинными словами (редактирование: по-видимому, это не всегда верно; но будет верно на многой архитектуре ПК). В тех случаях, где Вы хотите преобразовать без предупреждения, используйте "bool нечто =!! панель", которая преобразовывает нуль в ложь и ненулевой к истинному.

А vector< символ> или подобный использует меньше пространства, хотя это также имеет потенциал для взятия (очень маленькой) скорости, пораженной в некоторых обстоятельствах, потому что символы являются меньше, чем размер машинного слова. Это, я верю, главная причина, что bools реализованы с помощью ints вместо символов.

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

кроме того, добро пожаловать в клуб людей, которые хотят vector< bool> специализация, отброшенная из стандарта C++ (с bit_vector для замены его). Это - где все спокойные дети болтаются:).

5
ответ дан AHelps 24 November 2019 в 08:06
поделиться

Эта проблема уже была , обсудил на comp.lang.c ++. модерируемый. Предлагаемые решения:

  • Ваше собственное средство выделения (на основе std::allocator) и собственная векторная специализация;
  • использование std::deque (как рано рекомендовался в одной из книг S. Mayers) - но это не для Ваших требований;
  • делают обертку POD bool;
  • использование что-то (char / int / и т.д.) с тем же размером как bool вместо этого bool;

Также рано я видел, что предложение для стандартного комитета - представляет макрос (что-то как STD_VECTOR_BOOL_SPECIAL) для запрещения этой специализации - но AFAIK это предложение не было реализовано в stl реализациях и не было утверждено.

кажется, что Ваша проблема не имеет никаких способов сделать это приятно... Возможно, в C++ 0x.

4
ответ дан Dev Null 24 November 2019 в 08:06
поделиться
Другие вопросы по тегам:

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